/**
 * 数据删除等需要警告提示信息的地方都可以调用此函数
 * 调用方法是在相应html标签上加入以下全部或部分属性，其中有星号的为必选属性
 * *t="firm"   此为firm调用标记
 * *m="操作警告信息”
 * *href="接收操作的网址“
 * ct="多选项对应的html标签t属性的值"   通过html标签中的t属性确定有哪些checkbox是需要被操作的  ct = checkbox tag
 * nc="有多选项目需要操作时，但没有选中项目时的提示信息"   //ncm = not checked
 * go="执行完成后跳转的地址”   值为：1表示刷新当前页面; -1表示不执行任何操作; 如果是网址就跳转到此网址。默认值为1
 *
 * 如果未指定cg，那么忽略nc、cn属性
 * 如果href执行完成后返回的结果中有go参数，那么忽略firm go属性值，采用此处的go值
 *
 * href对应网址传过来可识别的参数：
 *  status 表示执行状态  true/false
 *  msg 提示信息
 *  go  表示跳转到的地址
 *
 * @return void
 */
var firm = function() {
    var tag = 'firm';   //firm操作的识别符

    /**
     * 初始化
     */
    var init = function() {
        $('[t=' + tag + ']').click(function(e){
            e.preventDefault(); //阻止html标签默认行为，主要是阻止a跳转

            var msg   = $(this).attr('m') || '确认执行操作吗',
                url   = $(this).attr('href'),
                goUrl = $(this).attr('go') || '1',
                checkboxTag   = $(this).attr('ct'),
                notCheckedMsg = $(this).attr('nc') || '请选择需要操作的项目',
                dao = checkboxTag ? getCheckboxVals(checkboxTag) : null;

            if (!url) {
                alert('请指定执行操作的地址');

                return false;
            }

            if (goUrl == '1') {
                goUrl = window.location.href;
            } else if(goUrl.length > 2) {
            } else {
                goUrl = '';
            }

            if (checkboxTag && (!dao || dao === null)) {
                alert(notCheckedMsg);

                return false;
            }

            if (!confirm(msg)) {
                return false;
            }

            run(url, dao, goUrl);
        })
    };

    var getCheckboxVals = function(checkboxTag) {
        if (!checkboxTag) {
            return false;
        }

        var $o = $('[g=' + checkboxTag + ']:checked');

        if($o.length < 1) {
            return false;
        }

        var key = '',
            vals = [];

        /**
         * 获取被选中的值
         */
        $o.each(function(k, v) {
            $_o = $(v);

            if (!key) {
                key = ($_o.attr('name')).replace(/\[\]/g, '');
            }

            vals.push($_o.val());
        });

        if (vals.length < 1) {
            return false;
        }

        var r;

        return (r[key] = vals);
    };

    /**
     * 执行操作
     */
    var run = function(url, dao, go) {
        var action = dao && dao === null ? 'get' : 'post';

        $[action](url, dao, function(j) {
            if (!j.status) {
                alert(j.msg);

                return false;
            }

            go = j.go || go;

            if (go) {
                redirect(go);
            }

            return true;
        }, 'json');
    };
    

    init();
};

